{{tag>Xenial programmation BROUILLON}}

----

====== SDL : Simple DirectMedia Layer ======


La [[http://www.libsdl.org/|SDL]] //(Simple DirectMedia Layer)// est une [[wpfr>Bibliothèque logicielle]] permettant de développer des programmes gérant le son, la vidéo, le clavier, la souris et le lecteur CD.
Elle a notamment été utilisée pour le portage du jeu [[wpfr>Civilization|Civilization II]] sous Linux et le jeu [[wpfr>Doom]] sous BeOS.

La bibliothèque est compatible avec le langage C++ nativement et des bindings pour d'autres langages (la liste complète est disponible sur le [[http://www.libsdl.org/|site officiel]]).

Elle possède plusieurs bibliothèques annexes gérant chacune des éléments additionnels : images, polices, réseau, sons, etc
===== Pour une utilisation simple =====

[[:tutoriel:comment_installer_un_paquet|Installez le paquet]] **[[apt>libsdl1.2debian]]**.

La **[[apt>libsdl2-2.0-0]]** permet de gérer plusieurs fenêtres et est celle couramment utilisée
(voir plus bas pour une utilisation simple des librairies complémentaires)

===== Installation complète  =====

Utiliser la commande suivante pour installer SDL2 avec toutes ces libraires:
<code>sudo apt install libsdl2-2.0-0 libsdl2-gfx-1.0-0 libsdl2-image-2.0-0 libsdl2-mixer-2.0-0 libsdl2-net-2.0-0 libsdl2-ttf-2.0-0</code>

===== Installer la version pour les développeurs =====


[[:tutoriel:comment_installer_un_paquet|Installez le paquet]]  **[[apt>libsdl2-dev]]** pour utiliser SDL2 mais le paquet **[[apt>libsdl1.2-dev ]]** est toujours utilisable.



===== Compiler un programme en C/SDL avec GCC ou g++=====

Placez-vous dans le répertoire où sont enregistrées vos sources. L'installation d'SDL fourni un petit script sdl-config qui, appelé avec les paramètres --cflags ou --libs, renseigne correctement le compilateur. tapez alors :

  gcc -o executable fichier1.c fichier2.c fichier3.c ...  `sdl-config --cflags --libs` 
gcc peut etre remplacé par g++ si vous programmez en C++.

Pour compiler plusieurs fichiers séparément puis les linker, utilisez :
  gcc -c -Wall -Wextra main.c `sdl-config --cflags`
  gcc -c -Wall -Wextra fichier1.c `sdl-config --cflags`
  gcc -o executable main.o fichier1.o `sdl-config --libs`

**Si vous avez installé le paquet libsdl2-dev et que vous programmez avec SDL2, utilisez sdl2-config au lieu de sdl-config.**

Une fois la compilation terminée, vous pourrez lancer votre programme avec :

  PATH=.:$PATH
  executable
  
Ou, plus simplement, sans modifier la variable PATH, avec :

  ./executable

===== Bibliothèques complémentaires =====

Pour installer SDL_image, SDL_ttf et SDL_mixer: [[:tutoriel:comment_installer_un_paquet|installez les paquets]]

**Version stable : [[apt://libsdl-image1.2,libsdl-mixer1.2,libsdl-ttf2.0-0 | libsdl-ttf2.0-0, libsdl-mixer1.2 libsdl-ttf2.0-0]]**.

**Version en développement : [[apt://libsdl-image1.2-dev,libsdl-mixer1.2-dev,libsdl-ttf2.0-dev | libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev]]**.


----

|**Nom**| **Utilité** | **installation stable SDL1** | **installation dev SDL1** |
|mixer| gestion de l'audio | **[[apt>libsdl-mixer1.2|libsdl-mixer1.2]]**| **[[apt>libsdl-mixer1.2-dev|libsdl-mixer1.2-dev]]** |
|ttf| écrire sur la fenêtre| **[[apt>libsdl-ttf1.2|libsdl-ttf1.2]]**| **[[apt>libsdl-ttf1.2-dev|libsdl-ttf1.2-dev]]** |
|image| gestion d'image | **[[apt>libsdl-image1.2|libsdl-image1.2]]**| **[[apt>libsdl-image1.2-dev|libsdl-image1.2-dev]]** |
|net| gestion du réseau| **[[apt>libsdl-net1.2|libsdl-net1.2]]**| **[[apt>libsdl-net1.2-dev|libsdl-net1.2-dev]]** |
|gfx| dessin/effet graphique | **[[apt>libsdl-gfx1.2-5|libsdl-gfx1.2-5]]** | **[[apt>libsdl-gfx1.2-dev|libsdl-gfx1.2-dev]]** |
|sound| format des fichiers sonores| **[[apt>libsdl-sound1.2|libsdl-sound1.2]]** | **[[apt>libsdl-sound-dev]]** |


----

Toutes bibliothèques SDL2 sont classifiées ainsi : __libsdl2-**type**-2.0-0__ pour les versions stable et __libsdl2-**type**-dev__ pour celles en développement. Grâce à cette indexage vous pouvez les installer facilement depuis un terminal.

Les options respectives à ajouter à la compilation avec GCC (après **-lSDLmain -lSDL //ou// -lSDL2main -lSDL2**) sont :
<code>
-lSDL_image # pour SDL_image
-lSDL_ttf # pour SDL_ttf
-lSDL_mixer # pour SDL_mixer
-lSDL_net # pour SDL_net
-lSDL_gfx # pour SDL_gfx
</code>

Si vous utilisez la version 2 d'une bibliothèque :
<code>
-lSDL2_ttf # par exemple pour SDL2_ttf
</code>

==== SDL_mixer (Audio) ====
Cette librairie annexe permet la gestion de l'**audio** [[https://www.libsdl.org/projects/SDL_mixer/ | site officiel]] de cette librairie 

Pour l'installer :
  * SDL1 - utilisation simple: **[[apt>libsdl1.2-mixer]]**
  * SDL2 - version 2.0 - utilisation simple : **[[apt>libsdl2-mixer-2.0-0]]**
  * SDL2 - développement : **[[apt>libsdl2-mixer-dev]]**
Pour compiler votre programme avec cette bibliothèque vous devez ajouter le link **-lSDL_mixer** ou **-lSDL2_mixer**

//Exemple si vous développez avec SDL2 et SDL2_mixer :// 
<code>gcc -o my_program fichier1.c fichier2.c `sdl2-config --cflags --libs` -lSDL2_mixer</code>


==== SDL_tff (Écriture dans fenêtre graphique)====
Cette librairie est utile pour écrire dans une fenêtre, elle s'appuie sur freetype2 (donc il faut freetype2)
Elle a besoin de polices d'écriture, voici des sites où vous pouvez trouver vos polices libres : [[https://fonts.google.com/ | Google Fonts]] , [[https://www.fontsquirrel.com/ | FontSquirrel.com]] , [[https://fontain.org/ | Fontain.org]]

Pour l'installer :
  * utilisation simple version 1: **[[apt>libsdl_tff-2.0.0]]**
  * utilisation simple version 2: **[[apt>libsdl2_tff-2.0.0]]**
Pour compiler votre programme avec SDL_ttf, vous devez ajouter le link **-lSDL_ttf** ou **-lSDL2_ttf**

//Exemple si vous utilisez SDL2 et SDL2_ttf//
<code>gcc -o my_program fichier1.c fichier2.c `sdl2-config --cflags --libs` -lSDL2_ttf</code>

===== Pour aller plus loin =====

Si vous savez déjà programmer en C/C++ et que vous voulez apprendre à utiliser la SDL pour vos programmes, il y a de très bons tutoriels :
  * [[https://zestedesavoir.com/tutoriels/1014/utiliser-la-sdl-en-langage-c/|Zest de savoir]] (dernière mise à jour 27/12/2018)
  * [[https://loka.developpez.com/tutoriel/sdl/|Développez.com]] 
  * [[https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/17117-installation-de-la-sdl|OpenClassrooms]] (dernière mise à jour 09/06/2020)

Voir aussi, si pour préférez [[:python]], la librairie [[wpfr>pygame]]

----

//Contributeurs : [[:utilisateurs:lost-in-the-shell]], [[:utilisateurs:sully]].//